Data storage and communication systems typically handle data that contains a significant amount of redundancy. Many techniques have been applied to decrease the amount of storage needed for data and the amount of essential data that needs to be transmitted to provide the initial data. Thus, modern techniques allow data to be transmitted in less time over a communications channel. It is common for compression to reduce the size of a data file by a 2:1 ratio or better.
In general, certain type-specific methods may be more efficient for particular file types than general algorithms. However, some type-specific methods require significant computational overhead in comparison with a general compression method. Some of the known compression techniques make implicit assumptions about the data being handled or a type of data file. For example, in video displays, there may be an assumption that only small portions of the video display will be changing, and it is only necessary to track the changes while retaining the unchanged portions.
The speed of compression and decompression is important in that a compression technique may not be acceptable if the computational overhead lowers the speed of communication sufficiently to cause degraded system performance. For example, run-length encoding takes advantage of repeated strings of a same character such as a space or zero. Thus, run-length coding encodes the repeated strings using an "escape" character, a repeat character, and the character to be repeated. Clearly, where characters are not repeated, the run-length coding is inefficient.
As more and more users implement data storage and data communication, there is a need for even more efficient data storage and faster data communication.